package com.ruoyi.web.controller.tool.designpattern.structuralPatterns.facade;

/**
 * 外观模式
 *
 * @author Hack2003
 * @date 2024/3/21 17:07
 **/
// 1. 定义子系统的组件
class SubsystemA {
    public void operation() {
        System.out.println("子系统 A 操作");
    }
}

class SubsystemB {
    public void operation() {
        System.out.println("子系统 B 操作");
    }
}

// 2. 定义外观类，提供统一的接口
class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;

    public Facade() {
        subsystemA = new SubsystemA();
        subsystemB = new SubsystemB();
    }

    public void operation() {
        subsystemA.operation();
        subsystemB.operation();
    }
}

/**
 * 外观模式是一种结构型设计模式，
 * 它提供一个统一的接口，用来访问一组接口。
 * 外观模式使得客户端不必直接与复杂的子系统交互，
 * 而是通过一个简单的外观对象来访问子系统。
 */
public class Test {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation();
    }
}
